package com.ruoyi.order.service;

import com.ruoyi.order.domain.OrderOperation;
import com.ruoyi.order.domain.WxVhiceodr;
import com.ruoyi.order.domain.dto.AssignOrders;
import com.ruoyi.order.domain.dto.WxVhiceodrDto;
import com.ruoyi.order.domain.vo.WxVhiceodrOeaiRcrVo;
import com.ruoyi.order.domain.vo.WxVhiceodrVo;

import java.util.List;
import java.util.Map;

/**
 * 租车订单实例Service接口
 *
 * @author ruoyi
 * @date 2024-08-29
 */
public interface IWxVhiceodrService
{
    /**
     * 查询租车订单实例
     *
     * @param orderNum 租车订单实例编号
     * @return 租车订单实例
     */
    public WxVhiceodrVo selectWxVhiceodrByNum(String orderNum);

    /**
     * 查询租车订单实例列表
     *
     * @param wxVhiceodr 租车订单实例
     * @return 租车订单实例集合
     */
    public List<WxVhiceodrVo> selectWxVhiceodrList(WxVhiceodrDto wxVhiceodr);

    public List<WxVhiceodrVo> selectWechatOrderList(String uid,String status);

    /**
     * 新增租车订单实例
     *
     * @param wxVhiceodr 租车订单实例
     * @return 结果
     */
    public int insertWxVhiceodr(WxVhiceodr wxVhiceodr);

    /**
     * 修改租车订单实例
     *
     * @param wxVhiceodr 租车订单实例
     * @return 结果
     */
    public int updateWxVhiceodr(WxVhiceodr wxVhiceodr);

    /**
     * 修改租车订单金额
     *
     * @param wxVhiceodr 租车订单实例
     * @return 结果
     */
    public int editMoney(WxVhiceodr wxVhiceodr);

    /**
     * 批量删除租车订单实例
     *
     * @param ids 需要删除的租车订单实例主键集合
     * @return 结果
     */
    public int deleteWxVhiceodrByIds(Long[] ids);

    /**
     * 删除租车订单实例信息
     *
     * @param id 租车订单实例主键
     * @return 结果
     */
    public int deleteWxVhiceodrById(Long id);


    public Map<String,String> generateOrder(WxVhiceodrDto wxVhiceodr) throws Exception;

    public WxVhiceodr generateBaseOrder(WxVhiceodr wxVhiceodr);

    /**
     * 员工调用接口 接单/取消/拒绝方法
     * @param wxVhiceodr 订单实例
     * @return 返回结果
     */
    public WxVhiceodr staffOperationOrders(WxVhiceodr wxVhiceodr);


    /**
     * 查询订单工单记录列表
     *
     * @param vo_num 订单工单记录
     * @return 订单工单记录集合
     */
    public List<WxVhiceodrOeaiRcrVo> selectWxVhiceodrRecordList(String vo_num);

    /**
     * 员工接单请求方法
     * @param wxVhiceodr 当前订单实体
     * @return 影响结果
     */
    public int acceptOrders(WxVhiceodr wxVhiceodr);

    /**
     * 指派订单用户接单
     * @return
     */
    public int assignOrders(AssignOrders assignOrders);

    public Map<String,Integer> selectSumQuantity(Long deptId);

    public int refundMoney(WxVhiceodrDto wxVhiceodrDto);

    public void recordOrder(WxVhiceodr wxVhiceodr, OrderOperation markFlag);

    public void paymentSuccessOrder(String orderNum);

    public Map<String,String> payOrder(WxVhiceodrDto wxVhiceodrDto);

    public int abandonOrder(WxVhiceodr wxVhiceodr);

    /**
     * 商家退单操作，不可逆操作，会将金钱通过微信进行退款
     * @param wxVhiceodr 退款对象
     * @return 影响
     */
    public int refuseOrder(WxVhiceodrDto wxVhiceodr);

    // 用户取车
    public int pickUpCar(WxVhiceodr wxVhiceodr);

    // 用户还车
    public int returnCar(WxVhiceodr wxVhiceodr);

    /**
     *  保存修改
     * @param wxVhiceodr 订单数据
     * @return 结果
     */
    public int saveUpdate(WxVhiceodr wxVhiceodr);

    /**
     *  订单结算
     * @param wxVhiceodr 订单实体类
     * @return 结果
     */
    public int orderSettlement(WxVhiceodr wxVhiceodr);

    /**
     * 退还租车押金
     * @param wxVhiceodr 订单实体
     * @return 结果
     */
    public int rentalDepositRefund(WxVhiceodr wxVhiceodr);

    /**
     * 退还违章押金
     * @param wxVhiceodr 订单实体
     * @return 结果
     */
    public int violationDepositRefund(WxVhiceodr wxVhiceodr);

    public int refundOrder(WxVhiceodr wxVhiceodr);
}
